package models

import (
	"strconv"

	"github.com/astaxie/beego/orm"
)

const (
	TypeRsvd  = 0  // 保留
	TypeText  = 10 // 文本任务
	TypeVoice = 20 // 语音任务
	TypeImage = 30 // 图片任务
	TypeVideo = 40 // 视频任务
)

const (
	ProjectRsvd       = 0  // 保留
	ProjectNotStarted = 10 // 未开始
	ProjectToDo       = 20
	ProjectDoing      = 21
	ProjectDone       = 22
	ProjectReview     = 30 // 审核中
	ProjectConfirm    = 40 // 确认中
	ProjectFinish     = 99 // 完成
)

type Project struct {
	Id           int64  `orm:"column(id)"`
	Name         string // 项目名称
	Type         uint8  // 项目类型: 0-保留, 10-文本, 20-语音, 30-图片, 40-视频
	Brief        string // 简要描述
	Description  string // 详细描述
	Cover        string // 封面图片url
	Status       uint8  // 项目状态: 0-保留, 10-未开始, 20-进行中, 30-审核中, 40-确认中, 99-完成
	TaskSum      int64  // 任务数目
	TaskTemplate string // 任务模板
	Created      int64  // 创建时间
	Updated      int64  // 更新时间
	Deadline     int64  // 截止时间
}

func (p *Project) TableName() string {
	return "fh_project"
}

func (p *Project) String() string {
	return strconv.FormatInt(p.Id, 10)
}

func (p *Project) Insert() error {
	if _, err := orm.NewOrm().Insert(p); err != nil {
		return err
	}
	return nil
}

func (p *Project) Read(fields ...string) error {
	err := orm.NewOrm().Read(p, fields...)
	if err != nil {
		return err
	}
	return nil
}

func (p *Project) Update(fields ...string) error {
	_, err := orm.NewOrm().Update(p, fields...)
	if err != nil {
		return err
	}
	return nil
}

func (p *Project) Delete() error {
	_, err := orm.NewOrm().Delete(p)
	if err != nil {
		return err
	}
	return nil
}

func (p *Project) All() []Project {
	projects := make([]Project, 0)

	query := orm.NewOrm().QueryTable(p.TableName())

	query.All(&projects)

	return projects
}

func init() {
	orm.RegisterModel(new(Project))
}
